// #include<iostream>
// #include<string>
// using namespace std;
// //拷贝构造
// /***
//  *
//  *1. 拷贝构造函数也是构造函数
//  *作用 通过一个对象去创建另一个对象
//  *参数 函数名：类名  参数：对象的引用
//  *
//  **/
//
// class MM {
//     public:
//     MM()=default;
//     MM(string name,int age) {
//         this->name = name;
//         this->age = age;
//     }
//     //拷贝构造函数
//     MM(const MM& obj) {
//         this->name = obj.name;
//         this->age = obj.age;
//         cout<<"copy constructor"<<endl;
//     }
//
//     //拷贝构造函数
//     // MM(MM&& obj) {
//     //     this->name = obj.name;
//     //     this->age = obj.age;
//     //     cout<<"copy constructor"<<endl;
//     // }
//
//     void print() {
//         cout<<name<<" "<<age<<endl;
//     }
//
// protected:
//     string name;
//     int age;
//     private:
// };
//
// void print_data(MM& obj) { //不调用拷贝构造函数 MM& obj = mm
//     obj.print();
// }
// void print_value(MM obj) { //调用拷贝构造函数 MM obj = mm
//     obj.print();
// }
//
// MM get_object() {
//     return MM();
// }
//
//
//
//
//
// int main() {
//     MM girl("消防",19);
//     MM beauty = girl; //此时会调用拷贝构造函数 隐式调用
//     MM mm(girl);
//     girl.print();
//     mm.print();
//     beauty.print();
//
//     MM obkk; //先初始化对象 后赋值
//     // obkk = girl; //这种情况是不调用拷贝构造函数的
//
//     print_value(obkk);
//
//     print_data(obkk);
//
//     //匿名对象（无名对象） 右值
//     MM result = MM("无名",28);
//
//
//     return 0;
// }